// RUN: %exploded_graph_rewriter %s | FileCheck %s

// CHECK: <b>Objects Under Construction: </b>
// CHECK-SAME:<table border="0">
// CHECK-SAME:  <tr>
// CHECK-SAME:    <td></td>
// CHECK-SAME:    <td align="left"><b>#0 Call</b></td>
// CHECK-SAME:    <td align="left" colspan="2">
// CHECK-SAME:      <font color="gray60">main </font>
// CHECK-SAME:    </td>
// CHECK-SAME:  </tr>
// CHECK-SAME:  <tr>
// CHECK-SAME:    <td></td>
// CHECK-SAME:    <td align="left"><i>S870</i></td>
// CHECK-SAME:    <td align="left">
// CHECK-SAME:      <font color="darkgreen">
// CHECK-SAME:          <i>(construct into local variable)</i>
// CHECK-SAME:      </font>
// CHECK-SAME:    </td>
// CHECK-SAME:    <td align="left">S s;</td>
// CHECK-SAME:    <td align="left">&amp;s</td>
// CHECK-SAME:  </tr>
// CHECK-SAME:</table>
Node0x1 [shape=record,label=
"{
    {
        "state_id": 2,
        "program_points": [
            {
                "kind": "BlockEntrance", "block_id": 1,
                "terminator": null, "term_kind": null,
                "tag": null, "node_id": 1,
                "has_report": 0, "is_sink": 0
            }
        ],
        "program_state": {
            "store": null,
            "environment": null,
            "constraints": null,
            "equivalence_classes": null,
            "disequality_info": null,
            "dynamic_types": null,
            "dynamic_casts": null,
            "constructing_objects": [
                { 
                    "lctx_id": 1, "location_context": "#0 Call", "calling": "main", "location": null, "items": [
                        { "stmt_id": 870, "kind": "construct into local variable", "argument_index": null, "pretty": "S s;", "value": "&s" }
                    ]
                }
            ],
            "checker_messages": null
        }
    }
\l}"];

// CHECK: <b>Indices Of Elements Under Construction: </b>
// CHECK-SAME:<table border="0">
// CHECK-SAME:  <tr>
// CHECK-SAME:    <td></td>
// CHECK-SAME:    <td align="left"><b>#0 Call</b></td>
// CHECK-SAME:    <td align="left" colspan="2">
// CHECK-SAME:      <font color="gray60">main </font>
// CHECK-SAME:    </td>
// CHECK-SAME:  </tr>
// CHECK-SAME:  <tr>
// CHECK-SAME:    <td></td>
// CHECK-SAME:    <td align="left"><i>S895</i></td>
// CHECK-SAME:    <td align="left">
// CHECK-SAME:      <font color="darkgreen"><i> </i></font>
// CHECK-SAME:    </td>
// CHECK-SAME:    <td align="left">
// CHECK-SAME:      CXXConstructExpr <test.cpp:8:7> 'S[2]'
// CHECK-SAME:    </td>
// CHECK-SAME:    <td align="left">Current index: 0</td>
// CHECK-SAME:  </tr>
// CHECK-SAME:</table>
Node0x2 [shape=record,label=
"{
    {
        "state_id": 2,
        "program_points": [
            {
                "kind": "BlockEntrance", "block_id": 1,
                "terminator": null, "term_kind": null,
                "tag": null, "node_id": 1,
                "has_report": 0, "is_sink": 0
            }
        ],
        "program_state": {
            "store": null,
            "environment": null,
            "constraints": null,
            "equivalence_classes": null,
            "disequality_info": null,
            "dynamic_types": null,
            "dynamic_casts": null,
            "index_of_element": [
                { 
                    "lctx_id": 1, 
                    "location_context": "#0 Call", 
                    "calling": "main", 
                    "location": null, 
                    "items": [
                        { 
                            "stmt_id": 895, 
                            "kind": null, 
                            "pretty": "CXXConstructExpr <test.cpp:8:7> 'S[2]'", 
                            "value": "Current index: 0" 
                        }
                    ]
                }
            ],
            "checker_messages": null
        }
    }
\l}"];

// CHECK: <b>Pending Array Init Loop Expressions: </b>
// CHECK-SAME:<table border="0">
// CHECK-SAME:  <tr>
// CHECK-SAME:    <td></td>
// CHECK-SAME:    <td align="left"><b>#0 Call</b></td>
// CHECK-SAME:    <td align="left" colspan="2">
// CHECK-SAME:        <font color="gray60">main </font>
// CHECK-SAME:    </td>
// CHECK-SAME:  </tr>
// CHECK-SAME:  <tr>
// CHECK-SAME:    <td></td>
// CHECK-SAME:    <td align="left"><i>S1112</i></td>
// CHECK-SAME:    <td align="left">
// CHECK-SAME:        <font color="darkgreen"><i> </i></font>
// CHECK-SAME:    </td>
// CHECK-SAME:    <td align="left">
// CHECK-SAME:        CXXConstructExpr <test.cpp:10:6> 'S'
// CHECK-SAME:    </td>
// CHECK-SAME:    <td align="left">Flattened size: 2</td>
// CHECK-SAME:  </tr>
// CHECK-SAME:</table>
Node0x3 [shape=record,label=
"{
    {
        "state_id": 2,
        "program_points": [
            {
                "kind": "BlockEntrance", "block_id": 1,
                "terminator": null, "term_kind": null,
                "tag": null, "node_id": 1,
                "has_report": 0, "is_sink": 0
            }
        ],
        "program_state": {
            "store": null,
            "environment": null,
            "constraints": null,
            "equivalence_classes": null,
            "disequality_info": null,
            "dynamic_types": null,
            "dynamic_casts": null,
            "pending_init_loops": [
                { 
                    "lctx_id": 1, 
                    "location_context": "#0 Call",
                    "calling": "main", 
                    "location": null, 
                    "items": [
                        { 
                            "stmt_id": 1112, 
                            "kind": null, 
                            "pretty": "CXXConstructExpr <test.cpp:10:6> 'S'", "value": "Flattened size: 2"
                        }
                    ]
                }
            ],
            "checker_messages": null
        }
    }
\l}"];

// CHECK: <b>Indices of Elements Under Destruction: </b>
// CHECK-SAME:<table border="0">
// CHECK-SAME:  <tr>
// CHECK-SAME:    <td></td>
// CHECK-SAME:    <td align="left"><b>#0 Call</b></td>
// CHECK-SAME:    <td align="left" colspan="2">
// CHECK-SAME:        <font color="gray60">main </font>
// CHECK-SAME:    </td>
// CHECK-SAME:  </tr>
// CHECK-SAME:  <tr>
// CHECK-SAME:    <td></td>
// CHECK-SAME:    <td align="left"><i>SNone</i></td>
// CHECK-SAME:    <td align="left">
// CHECK-SAME:        <font color="darkgreen"><i> </i></font>
// CHECK-SAME:    </td>
// CHECK-SAME:    <td align="left">Current index: </td>
// CHECK-SAME:    <td align="left">1</td>
// CHECK-SAME:  </tr>
// CHECK-SAME:</table>
Node0x4 [shape=record,label=
"{
    {
        "state_id": 2,
        "program_points": [
            {
                "kind": "BlockEntrance", "block_id": 1,
                "terminator": null, "term_kind": null,
                "tag": null, "node_id": 1,
                "has_report": 0, "is_sink": 0
            }
        ],
        "program_state": {
            "store": null,
            "environment": null,
            "constraints": null,
            "equivalence_classes": null,
            "disequality_info": null,
            "dynamic_types": null,
            "dynamic_casts": null,
            "pending_destructors": [
                { 
                    "lctx_id": 1, 
                    "location_context": "#0 Call", 
                    "calling": "main", 
                    "location": null, 
                    "items": [
                        { 
                            "stmt_id": null, 
                            "kind": null, 
                            "pretty": "Current index: ", 
                            "value": "1" 
                        }
                    ]
                }
            ],
            "checker_messages": null
        }
    }
\l}"];
